Custom ডেকোরেটর তৈরি করা

Web Development - জ্যাঙ্গো (Django) - Django ডেকোরেটর এবং Middleware
182

Django তে ডেকোরেটর হল একটি ফাংশন যা অন্য ফাংশন বা মেথডের আচরণ পরিবর্তন বা প্রসারিত করতে ব্যবহৃত হয়। Custom ডেকোরেটর তৈরি করে আপনি আপনার নিজস্ব ফাংশনালিটি যোগ করতে পারেন, যেমন অ্যাক্সেস কন্ট্রোল, লগিং, বা অন্যান্য সিস্টেম লজিক। Django তে বেশ কিছু বিল্ট-ইন ডেকোরেটর যেমন login_required ইত্যাদি রয়েছে, তবে আপনি কাস্টম ডেকোরেটর তৈরি করে আরো বিশেষ ব্যবহারের জন্য ডেকোরেটর তৈরি করতে পারেন।


Django তে Custom ডেকোরেটর তৈরি করার ধাপ

১. Custom ডেকোরেটর ফাংশন তৈরি করা

ডেকোরেটর সাধারণত একটি ফাংশন যা আরেকটি ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে এবং তার উপর কোন ফাংশনালিটি প্রয়োগ করে। নিচে একটি সিম্পল কাস্টম ডেকোরেটর উদাহরণ দেওয়া হল, যা শুধুমাত্র সুপারইউজারদের অ্যাক্সেস দেয়।

from django.http import HttpResponseForbidden

def superuser_required(view_func):
    def _wrapped_view(request, *args, **kwargs):
        # চেক করে যে ইউজার সুপারইউজার কি না
        if not request.user.is_superuser:
            return HttpResponseForbidden("You do not have permission to view this page.")
        return view_func(request, *args, **kwargs)
    return _wrapped_view

এখানে:

  • superuser_required: এই ডেকোরেটরটি চেক করে যে ইউজার সুপারইউজার কিনা।
  • _wrapped_view: এটি আসল ভিউ ফাংশন যা ডেকোরেটরের মধ্যে আবদ্ধ থাকে এবং ইনপুট হিসেবে request এবং অন্যান্য আর্গুমেন্ট গ্রহণ করে।

২. ডেকোরেটর ব্যবহার করা

একবার আপনি ডেকোরেটর তৈরি করলে, সেটি আপনার ভিউ ফাংশনে ব্যবহার করতে পারেন। ডেকোরেটরটি ব্যবহার করতে, আপনি সাধারণভাবে ভিউ ফাংশনে ডেকোরেটরটি প্রয়োগ করবেন:

from django.shortcuts import render
from .decorators import superuser_required

@superuser_required
def dashboard(request):
    return render(request, 'dashboard.html')

এখানে:

  • @superuser_required: ডেকোরেটরটি ভিউ ফাংশনে প্রয়োগ করা হয়েছে। এর মাধ্যমে, শুধুমাত্র সুপারইউজাররা dashboard ভিউটি অ্যাক্সেস করতে পারবে। অন্যান্য ব্যবহারকারীরা HttpResponseForbidden রিটার্ন করবে।

৩. কাস্টম ডেকোরেটরের অন্যান্য উদাহরণ

ব্যবহারকারী লগইন চেক করা:

from django.http import HttpResponseRedirect
from django.urls import reverse

def login_required_custom(view_func):
    def _wrapped_view(request, *args, **kwargs):
        if not request.user.is_authenticated:
            return HttpResponseRedirect(reverse('login'))
        return view_func(request, *args, **kwargs)
    return _wrapped_view

এখানে:

  • login_required_custom: যদি ইউজার লগইন না থাকে, তবে ইউজারকে লগইন পেজে রিডাইরেক্ট করবে।

ডেটা ভ্যালিডেশন চেক করা:

from django.http import HttpResponseBadRequest

def validate_data(view_func):
    def _wrapped_view(request, *args, **kwargs):
        data = request.POST.get('data')
        if not data or len(data) < 5:
            return HttpResponseBadRequest("Invalid data provided.")
        return view_func(request, *args, **kwargs)
    return _wrapped_view

এখানে:

  • validate_data: ইউজারের পাঠানো ডেটার ভ্যালিডেশন চেক করে, যদি ডেটা সঠিক না হয় তবে HttpResponseBadRequest ফেরত পাঠায়।

কাস্টম ডেকোরেটর তৈরি করার সুবিধা

  • কোড পুনঃব্যবহারযোগ্যতা: একাধিক ভিউতে একই ফাংশনালিটি প্রয়োগ করা সহজ হয়ে যায়।
  • কোড সাদৃশ্য: ডেকোরেটর ব্যবহার করে কোড পরিষ্কার এবং সাদৃশ্যপূর্ণ থাকে।
  • রিয়াসেবল লজিক: আপনি বিভিন্ন ধরনের লগিক ভিউ ফাংশনের বাইরে রাখতে পারেন, যার ফলে আপনার ভিউ ফাংশনগুলো আরও পরিষ্কার ও maintainable হয়।

এইভাবে Django তে আপনি আপনার কাস্টম ডেকোরেটর তৈরি করতে পারেন এবং বিভিন্ন প্রয়োজনে তা ব্যবহার করতে পারেন।

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...